# user.py
# 用户相关ORM模型示例

from sqlalchemy import Column, Integer, String, Boolean, DateTime
from sqlalchemy.sql import func
from app.db.base_class import Base   # 导入我们在 app/db/base.py 中定义的 Base

class User(Base):
    # __tablename__ 告诉 SQLAlchemy，这个类要映射到数据库中名为 "users" 的表
    __tablename__ = "users"

    # --- 定义表的列 (Columns) ---

    # id: 用户ID
    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    # primary_key=True: 这是主键，唯一标识表中的每一行。
    # index=True: 为这一列创建索引，可以极大地加快基于 id 的查询速度。
    # autoincrement=True: 当新用户创建时，数据库会自动为其分配一个递增的ID。

    name = Column(String(50), nullable=True)
    # String(50): 一个最多包含50个字符的字符串。
    # nullable=True: 这一列可以为空值 (NULL)，因为用户可能没有提供

    # email: 邮箱地址
    email = Column(String(100), unique=True, index=True, nullable=False)
    # String(100): 一个最多包含100个字符的字符串。
    # unique=True: 保证数据库中每个用户的邮箱都是唯一的，防止重复注册。
    # nullable=False: 这一列不允许为空值 (NULL)。

    # hashed_password: 加密后的密码
    # 我们绝不会在数据库中存储明文密码，所以只存哈希值
    hashed_password = Column(String(255), nullable=False)

    # is_active: 账户是否激活
    is_active = Column(Boolean, default=True)
    # default=True: 如果在创建用户时不指定这个值，它会默认为 True。

    # created_at: 创建时间
    created_at = Column(DateTime(timezone=True), server_default=func.now())
    # server_default=func.now(): 让数据库在创建记录时，自动将该字段的值设置为当前的服务器时间。

    # updated_at: 最后更新时间
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())
    # onupdate=func.now(): 每当这条记录被更新时，数据库会自动将该字段的值更新为当前时间。